/*
 * Aktorik_HAL.h
 *
 *  Created on: 08.04.2011
 *      Author: Jonas
 */

#ifndef AKTORIK_HAL_H_
#define AKTORIK_HAL_H_

#include "SE2header.h"
#include "HAWThread.h"
#include "OutBefehle.h"
#include <unistd.h>
#include <unistd.h>
#include <pthread.h>

// Port der Digitalen IO Karte (s. Datenblatt)
#define D_IOBASE 0x300 								// Anfangsadresse Ports
#define DIGITAL_CARD_CONTROL (D_IOBASE + 0x03) 		// Adresse von Card Control
#define DIGITAL_CARD_CROUP0_PORTA (D_IOBASE + 0x00) // Adresse von Port A

extern pthread_mutex_t hw_lock;
class Aktorik_HAL{

private:
	Aktorik_HAL();	//private, weil singleton
	virtual ~Aktorik_HAL();
	Aktorik_HAL(const Aktorik_HAL&) {}
	static Aktorik_HAL* pInstance;

	int writeBit(int port, int bitNummer, int bitWert);
	void gelbeAmpel(int anBit);
	void roteAmpel(int anBit);
	void grueneAmpel(int anBit);
	void motorRechts();
	void motorLinks();
	void motorLangsam(int anBit);
	void motorStopp(int anBit);
	void motorReset();
	void weiche(int anBit);
	void ledStartT(int anBit);
	void ledResetT(int anBit);
	void ledQ1(int anBit);
	void ledQ2(int anBit);
	void reset();

public:
	static Aktorik_HAL* getInstance();
	void HAL_aufruf(out_befehle funktion, int anBit);
	void HAL_aufruf(out_befehle funktion);
};

#endif /* AKTORIK_HAL_H_ */
